package com.mixsmart.core.service;

import java.io.Serializable;
import java.util.List;

import com.mixsmart.core.bean.Paginate;
import com.mixsmart.core.bean.entity.IEntityBean;
import com.mixsmart.spellsql.ICondition;

/**
 * 基础服务---接口类；
 * 定义了与实体对象关联的通用查询方法
 * @author lmq
 * @version 1.0
 * @since JDK版本大于等于1.6
 * 2016年1月15日
 * @param <T>
 * @param <PK>
 */
public interface IBaseService<T extends IEntityBean, PK extends Serializable> {
	
	/**
	 * 根据主键获取数据
	 * @param id 主键
	 * @return 返回实体对象
	 */
	public T find(PK id);
	
	/**
	 * 根据条件获取数据
	 * @param condition 条件对象（Cnd工具类获取条件）
	 * @see {@link com.mixsmart.core.dao.IQueryEntityDao#find(ICondition)}
	 * @return 返回实体对象
	 */
	public T find(ICondition condition);
	
	/**
	 * 根据条件获取数据
	 * @param condition 条件对象（Cnd工具类获取条件）
	 * @see {@link com.mixsmart.core.dao.IQueryEntityDao#finds(ICondition)}
	 * @return 返回实体对象集合
	 */
	public List<T> finds(ICondition condition);
	
	/**
	 * 根据条件分页查询获取数据
	 * @param condition 条件对象（Cnd工具类获取条件）
	 * @param pageNo 页面数
	 * @param pageSize 
	 * @return 返回分页对象 
	 * @see {@link com.mixsmart.core.dao.IQueryEntityDao#finds(ICondition, int, int)}
	 */
	public Paginate<T> findPage(ICondition condition, int pageNo, int pageSize);
	
	/**
	 * 根据主键获取数据
	 * @param clazz
	 * @param id 主键
	 * @return 返回实体对象
	 */
	public <E> E find(Class<? extends IEntityBean> clazz,PK id);
	
	/**
	 * 根据主键数组获取数据
	 * @param clazz 要获取的实体对象
	 * @param condition 条件对象(Cnd工具类)
	 * @return 返回实体对象集合
	 */
	public <E> List<E> finds(Class<? extends IEntityBean> clazz, ICondition condition);
	
	/**
	 * 获取查询服务类
	 * @return 返回查询服务类
	 */
	public IQueryService getQueryServ();
	
}
